2장. 왜 동영상을 잘게 나누는가
2.1 동영상을 “쪼개서” 전달한다는 것의 의미
HLS는 동영상을 하나의 파일로 다루지 않는다.
대신 다음과 같이 처리한다.
동영상을 짧은 시간 단위의 조각으로 나누고, 이를 순차적으로 전달한다
이 개념을 쉽게 이해하려면 이렇게 생각하면 된다.
HLS는 방송 영상을
한 편의 긴 영화 파일이 아니라
짧은 영상 클립들의 집합으로 다룬다.
예를 들어 10초짜리 영상이라면:
- 0~2초
- 2~4초
- 4~6초
- 6~8초
- 8~10초
이렇게 여러 개의 조각으로 나뉜다.
플레이어는 이 조각들을:
순서대로 하나씩 다운로드하면서 동시에 재생한다
즉, 전체 영상을 한 번에 받는 것이 아니라
조각 단위로 이어 붙이면서 재생하는 구조다.
2.2 왜 굳이 잘게 나누는가
이 구조는 단순한 구현 방식이 아니라
스트리밍의 문제를 해결하기 위한 핵심 설계다.
2.2.1 네트워크 불안정에 대한 대응
인터넷 환경은 항상 안정적이지 않다.
- 속도가 순간적으로 떨어질 수 있고
- 패킷 손실이 발생할 수 있으며
- 연결이 일시적으로 끊길 수도 있다
만약 하나의 큰 파일을 전송하는 구조라면:
- 다운로드 중단 시 전체 흐름이 끊기고
- 재시작 비용이 매우 크다
반면 HLS처럼 조각 단위로 나누면:
- 일부 조각만 실패
- 다음 조각부터 다시 요청 가능
즉,
문제를 “전체 실패”에서 “부분 실패”로 축소한다
이것이 HLS가 안정적인 이유다.
2.2.2 요청 기반 구조와의 자연스러운 결합
HLS는 HTTP 요청 기반 구조다.
이 구조에서는:
- 요청 → 응답 → 종료
- 다시 요청 → 응답 → 종료
이 흐름이 반복된다.
동영상을 조각으로 나누면 이 구조에 딱 맞는다.
- 조각 하나 = 요청 하나
- 요청 단위로 처리 가능
즉,
조각 단위 구조는 HTTP의 특성과 정확히 맞물린다
2.3 적응형 비트레이트 (ABR)의 필요성
네트워크는 항상 일정하지 않다.
- 어떤 순간에는 10Mbps
- 어떤 순간에는 2Mbps
이 상황에서 항상 고화질 영상을 보내면:
- 버퍼링 발생
- 재생 끊김 발생
반대로 항상 저화질이면:
- 화질 낭비
- 사용자 경험 저하
이 문제를 해결하기 위해 등장한 개념이
적응형 비트레이트 (Adaptive Bitrate, ABR)
이다.
2.4 ABR이 가능한 이유
ABR은 HLS의 “조각 구조” 덕분에 가능하다.
핵심은 이것이다:
각 조각이 독립적인 영상 단위로 존재한다
즉, 같은 시간 구간이라도
여러 화질 버전이 존재할 수 있다.
예를 들어:
| 시간 구간 | 1080p | 720p | 480p |
|---|---|---|---|
| 0~2초 | seg1_1080 | seg1_720 | seg1_480 |
| 2~4초 | seg2_1080 | seg2_720 | seg2_480 |
플레이어는 다음과 같은 선택이 가능하다.
- seg1은 1080p로 재생
- seg2는 720p로 전환
즉,
다음 조각부터 화질을 바꿀 수 있다
이것이 ABR의 핵심이다.
2.5 ABR의 동작 원리
플레이어는 단순히 랜덤으로 화질을 바꾸지 않는다.
다음 요소들을 기반으로 판단한다.
1) 다운로드 속도
플레이어는 조각을 다운로드하면서
속도를 측정한다.
예:
- seg1 다운로드: 0.3초 → 빠름
- seg2 다운로드: 1.5초 → 느림
2) 버퍼 상태
- 버퍼가 충분하면 → 고화질 유지
- 버퍼가 줄어들면 → 화질 낮춤
3) 네트워크 변화
속도가 떨어지면:
- 다음 조각부터 낮은 화질 선택
속도가 올라가면:
- 다시 높은 화질로 전환
2.6 ABR의 실제 동작 흐름
플레이어 내부에서는 다음과 같은 흐름이 반복된다.
- 현재 화질로 segment 요청
- 다운로드 시간 측정
- 네트워크 상태 계산
- 다음 segment 화질 결정
이 과정을 통해:
끊김 없이 가능한 최고 화질을 유지하려고 시도한다